package com.jamie.jdk8.optional;

import java.util.Optional;

public class OptionalUser {

    public static class User {

        private String name;

        private String age;

        public String getName() {
            return name;
        }

    }

    private static User anoymos() {
        return new User();
    }

    public static void main(String[] args) {
        User user = null;
        Optional<User> optionalUser = Optional.ofNullable(user);
        // 存在即返回，空则提供默认值
        User user1 = optionalUser.orElse(new User());
        // 存在即返回，空则由函数去创建
        User user2 = optionalUser.orElseGet(OptionalUser::anoymos);
        // 存在即返回，否则抛出异常
        User user3 = optionalUser.orElseThrow(RuntimeException::new);
        // 存在才去做相应的处理
        optionalUser.ifPresent(u -> System.out.println(u.getName()));

        // map 可以对 Optional 中的对象执行某种操作，且会返回一个 Optional 对象
        String anymos = optionalUser.map(u -> u.getName()).orElse("anymos");
        // map 是可以无限级联操作的
        Integer integer = optionalUser.map(u -> u.getName()).map(name -> name.length()).orElse(0);



    }

}

